package Model;

import Componenten.LocalTypes;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;

/**
 *
 * @author Bram Slob en Roderick van Seijen
 */
public class Element implements LocalTypes {
    
    
    private ElementType elementType;
    private Image afbeelding;
    private Image afbeeldingOpEindvak;
    private Vak huidigVak;
    
    public Element(ElementType et, Vak v)
    {
        huidigVak = v;
        setElementType(et);
    }
    
    public ElementType getElementType()
    {
        return elementType;
    }
    
    public void setElementType(ElementType et)
    {
        elementType = et;
        
        URL loc = null;
        URL locEindVak = null;
        
        switch(et){
            case MUUR:
                loc = this.getClass().getResource("/Resources/wall.png");
                locEindVak = this.getClass().getResource("/Resources/wall.png"); 
            break;
            case SPELER:
                loc = this.getClass().getResource("/Resources/player.png");
                locEindVak = this.getClass().getResource("/Resources/player2.gif");
            break;
            case DOOS:
                loc = this.getClass().getResource("/Resources/crate.png");
                locEindVak = this.getClass().getResource("/Resources/Crate2.jpg");
            break;
        }
        
        ImageIcon iia = new ImageIcon(loc);
        afbeelding = iia.getImage();
        iia = new ImageIcon(locEindVak);
        afbeeldingOpEindvak = iia.getImage();
    }
    
    public Image getAfbeelding(){
        Image ret;
        switch(huidigVak.getVakType()){
            case EINDVAK:
                ret = afbeeldingOpEindvak;
                break;
            default:
                ret = afbeelding;
                break;
        }
        return ret;
    }
    
    // probeer element te verhuizen en return true als dit gelukt is
    public boolean beweeg(Richting r, Modus m){ 
        boolean ret = false;
        
        Vak buurVak = huidigVak.getBuurvak(r);
        
        if (buurVak != null){
            
            Element buurElement = buurVak.getElement();
            
            // als buurvak leeg is
            if (buurElement == null)
            {
                switch (elementType) {
                case DOOS:
                case SPELER:
                    buurVak.setElement(this);
                    huidigVak.setElement(null);
                    huidigVak = buurVak;
                    System.out.println("Object " + this.elementType.toString() + " verschoven naar (" + this.huidigVak.getPositie().getX() + "," + this.huidigVak.getPositie().getY() + ")");
                    ret = true;
                    break;
                }
            // als buurvak niet leeg is
            } else {
                switch (elementType) {
                case DOOS:
                    if (m == Modus.VOLWASSENE) break;
                    //ga verder bij modus KIND
                case SPELER:
                    if (buurElement.beweeg(r, m)) {
                        buurVak.setElement(this);
                        huidigVak.setElement(null);
                        huidigVak = buurVak;
                        System.out.println("Object " + this.elementType.toString() + " verschoven naar (" + this.huidigVak.getPositie().getX() + "." + this.huidigVak.getPositie().getY() + ")");
                        ret = true;
                    }
                    break;
                }
            }
        }
            
        return ret;
    }
    
    
}
